<?php
require_once('common.php');
require_once('lib\Encrypt.php');
require_once('lib\Redis.php');
$param = $_POST;

//判断用户是否有提交数据
if (!empty($param)) {
    //校验用户提交数据
    if (!isset($param['content']) || !$param['content']) {
        show('01', '数据不合法');
    }
    if (!isset($param['encryptKey']) || !$param['encryptKey']) {
        show('01', '数据不合法');  //用户登陆操作提交的必须存在encryptKey
    }
    //对用户数据解密
    //1.解密encryptKey 获取秘钥
    $encrypt = new lib\Encrypt();
    try {

        $encryptKey = $encrypt::rsaDecrypt($param['encryptKey']);
        if ($encryptKey === false) {
            throw new \Exception('数据解析失败1');
        }

        //使用秘钥对用户数据解密
        $contentDecrypt = $encrypt::aesDecrypt($param['content'], $encryptKey);
        if ($contentDecrypt === false) {
            throw new \Exception('数据解析失败2');
        }

        //将用户数据格式化
        parse_str($contentDecrypt, $userRealParam);
    } catch (\Exception $e) {
        show('05', $e->getMessage());
    }


    //校验用户真实提交数据
    if (!isset($userRealParam['userName']) || !$userRealParam['userName']) {
        show('01', '用户名不为空');
    }
    if (!isset($userRealParam['userPwd']) || !$userRealParam['userPwd']) {
        show('01', '密码不为空');
    }

    //需要做DB数据校验[这里数据固定不做校验]
    if ($userRealParam['userName'] != 'admin' || $userRealParam['userPwd'] != 123456) {
        show('01', '用户名或密码有误');
    }

    //用户数据校验成功后，需要生成token并存储到redis中
    $token = md5(uniqid(true) . $userRealParam['userName']);
    $redis = new Redis();
    $res = $redis->setex('token_' . $token, json_encode([
        // 'uid' => 1,  记录DB查询后返回的用户数据
        'encryptKey' => $encryptKey
    ]), 7200);

    if ($res != 1) {
        show('01', '系统异常');
    }

    //返回给用户数据需要进行加密
    $result = [
        'user_token' => $token,
        // 'userInfo' => //将用户数据返回给客户端，根据需要来返回
    ];

    //将Array转换为Json
    $result = json_encode($result);

    //进行AES加密
    $result = $encrypt::aesEncrypt($result, $encryptKey);

    show('00', 'success', ['content' => $result]);





}





show('01', 'success');
